home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / bin / foo2qpdl-wrapper < prev    next >
Text File  |  2008-09-09  |  17KB  |  683 lines

  1. #!/bin/sh
  2.  
  3. #* Copyright (C) 2003-2006  Rick Richardson
  4. #*
  5. #* This program is free software; you can redistribute it and/or modify
  6. #* it under the terms of the GNU General Public License as published by
  7. #* the Free Software Foundation; either version 2 of the License, or
  8. #* (at your option) any later version.
  9. #*
  10. #* This program is distributed in the hope that it will be useful,
  11. #* but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. #* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. #* GNU General Public License for more details.
  14. #*
  15. #* You should have received a copy of the GNU General Public License
  16. #* along with this program; if not, write to the Free Software
  17. #* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. #*
  19. #* Authors: Rick Richardson <rick.richardson@comcast.net>
  20.  
  21. VERSION='$Id: foo2qpdl-wrapper.in,v 1.30 2008/05/02 04:08:12 rick Exp $'
  22.  
  23. #
  24. # Printer Notes:
  25. #
  26. # Samsung CLP-300: ICM
  27. # Samsung CLP-600: CRD, need ICM for black text
  28. # Samsung CLP-610: -z2, CRD, need ICM for black text
  29. # Samsung CLX-3160: ICM
  30. # Xerox Phaser 6110: ICM
  31. #
  32.  
  33. PROGNAME="$0"
  34. BASENAME=`basename $PROGNAME`
  35. PREFIX=/usr
  36. SHARE=$PREFIX/share/foo2qpdl
  37. PATH=$PATH:/sw/bin:/opt/local/bin
  38.  
  39. #
  40. #    Log the command line, for debugging and problem reports
  41. #
  42. if [ -x /usr/bin/logger ]; then
  43.     logger -t "$BASENAME" -p lpr.info -- "$BASENAME $@" </dev/null
  44. fi
  45.  
  46. usage() {
  47.     cat <<EOF
  48. Usage:
  49.     $BASENAME [options] [ps-file]
  50.  
  51.     Foomatic printer wrapper for the foo2qpdl printer driver.
  52.     This script reads a Postscript ps-file or standard input
  53.     and converts it to a Samsung QPDL stream (CLP-600).
  54.  
  55. Normal Options:
  56. -c                Print in color (else monochrome)
  57. -d duplex         Duplex code to send to printer [$DUPLEX]
  58.                     1=off, 2=longedge, 3=shortedge
  59. -m media          Media code to send to printer [$MEDIA]
  60.                     1=standard, 2=transparency, 3=glossy, 257=envelope,
  61.                     259=letterhead, 261=thickstock, 262=postcard, 263=labels
  62. -p paper          Paper code [$PAPER]
  63.                     0=letter, 5=legal, 7=executive, 9=A4, 11=A5, 13=B5
  64.                     20=env#10, 27=envDL 28=envC5 34=envB5 37=envMonarch
  65. -n copies         Number of copies [$COPIES]
  66. -r <xres>x<yres>  Set device resolution in pixels/inch [$RES]
  67. -s source         Source code to send to printer [$SOURCE]
  68.                     1=upper, 2=lower, 4=manual, 7=auto
  69.             Code numbers may vary with printer model.
  70. -t                Draft mode.  Every other pixel is white.
  71. -2/-3/-4/-6/-8/-10/-12/-14/-15/-16/-18
  72.                   Print with N-up (requires psutils)
  73. -o orient         For N-up: -op is portrait, -ol is landscape, -os is seascape.
  74.  
  75. Printer Tweaking Options:
  76. -u <xoff>x<yoff>  Set offset of upper left printable in pixels [varies]
  77. -l <xoff>x<yoff>  Set offset of lower right printable in pixels [varies]
  78. -L mask           Send logical clipping values from -u/-l in ZjStream [3]
  79.                   0=no, 1=Y, 2=X, 3=XY
  80. -P                Do not output START_PLANE codes.  May be needed by some
  81.                   monochrome-only printers.
  82. -X padlen         Add extra zero padding to the end of BID segments [16]
  83. -z model          Model: 0=CLP-300 1=CLP-600 2=CLP-610
  84.  
  85. Color Tweaking Options:
  86. -g gsopts         Additional options to pass to Ghostscript, such as
  87.                   -dDITHERPPI=nnn, etc.  May appear more than once. []
  88. -G profile.icm    Convert profile.icm to a Postscript CRD using icc2ps and
  89.                   adjust colors using the setcolorrendering PS operator.
  90.                   $SHARE/icm/ will be searched for profile.icm.
  91. -I intent         Select profile intent from ICM file [$INTENT]
  92.                   0=Perceptual, 1=Colorimetric, 2=Saturation, 3=Absolute
  93. -G gamma-file.ps  Prepend gamma-file to the Postscript input to perform
  94.                   color correction using the setcolortransfer PS operator.
  95.  
  96. Debugging Options:
  97. -S plane          Output just a single color plane from a color print [all]
  98.                   1=Cyan, 2=Magenta, 3=Yellow, 4=Black
  99. -D lvl            Set Debug level [$DEBUG]
  100. -V                $VERSION
  101. EOF
  102.  
  103.     exit 1
  104. }
  105.  
  106. #
  107. #       Report an error and exit
  108. #
  109. error() {
  110.     echo "$BASENAME: $1" >&2
  111.     exit 1
  112. }
  113.  
  114. dbgcmd() {
  115.     if [ $DEBUG -ge 1 ]; then
  116.         echo "$@" >&2
  117.     fi
  118.     "$@"
  119. }
  120.  
  121. #
  122. #    N-up-ify the job.  Requires psnup from psutils package
  123. #
  124. nup() {
  125.     case "$NUP" in
  126.     [2368]|1[0458])
  127.     tr '\r' '\n' | psnup $NUP_ORIENT -d2 -$NUP -m.3in -p$paper -q
  128.     ;;
  129.     [49]|1[26])
  130.     tr '\r' '\n' | psnup $NUP_ORIENT -d2 -$NUP -m.5in -p$paper -q
  131.     ;;
  132.     *)
  133.     error "Illegal call to nup()."
  134.     ;;
  135.     esac
  136. }
  137.  
  138. #
  139. #       Process the options
  140. #
  141.  
  142. # Try to use a local copy of GhostScript 8.54, if available.  Otherwise,
  143. # fallback to whatever the Linux distro has installed (usually 7.07)
  144. #
  145. # N.B. := operator used here, when :- would be better, because "ash"
  146. # doesn't have :-
  147. if gs.foo -v >/dev/null 2>&1; then
  148.         GSBIN=${GSBIN:-gs.foo}
  149. else
  150.         GSBIN=${GSBIN:-gs}
  151. fi
  152.  
  153. CMDLINE="$*"
  154. DEBUG=0
  155. DUPLEX=1
  156. COLOR=
  157. COLORMODE=default
  158. MODEL=0
  159. QUALITY=1
  160. QUALITY=wts
  161. MEDIA=0
  162. COPIES=1
  163. test -r /etc/papersize && PAPER=$(cat /etc/papersize)
  164. test "$PAPER" || PAPER=0
  165. RES=1200x600
  166. SOURCE=1
  167. NUP=
  168. CLIP_UL=
  169. CLIP_LR=
  170. CLIP_LOG=
  171. BC=
  172. AIB=
  173. NOPLANES=
  174. COLOR2MONO=
  175. GAMMAFILE=default
  176. INTENT=0
  177. GSOPTS=
  178. EXTRAPAD=
  179. SAVETONER=
  180. NUP_ORIENT=
  181. GSDEV=-sDEVICE=pbmraw
  182. # What mode to use if the user wants us to pick the "best" mode
  183. case `$GSBIN --version` in
  184. 7*)    DEFAULTCOLORMODE=10
  185.     DEFAULTCOLORMODE=1
  186.     ;;
  187. 8.1*)
  188.     DEFAULTCOLORMODE=1
  189.     QUALITY=1
  190.     ;;
  191. *)    DEFAULTCOLORMODE=1
  192.     ;;
  193. esac
  194. while getopts "1:23456789o:b:cC:d:g:l:u:L:m:n:p:q:r:s:tz:ABS:D:G:I:PX:Vh?" opt
  195. do
  196.     case $opt in
  197.     b)    GSBIN="$OPTARG";;
  198.     c)    COLOR=-c;;
  199.     d)    DUPLEX="$OPTARG";;
  200.     g)    GSOPTS="$GSOPTS $OPTARG";;
  201.     m)    MEDIA="$OPTARG";;
  202.     n)    COPIES="$OPTARG";;
  203.     p)    PAPER="$OPTARG";;
  204.     q)    QUALITY="$OPTARG";;
  205.     r)    RES="$OPTARG";;
  206.     s)    SOURCE="$OPTARG";;
  207.     t)    SAVETONER="-t";;
  208.     z)    MODEL="$OPTARG";;
  209.     l)    CLIP_LR="-l $OPTARG";;
  210.     u)    CLIP_UL="-u $OPTARG";;
  211.     L)    CLIP_LOG="-L $OPTARG";;
  212.     A)    AIB=-A;;
  213.     B)    BC=-B;;
  214.     C)    COLORMODE="$OPTARG";;
  215.     S)    COLOR2MONO="-S$OPTARG";;
  216.     D)    DEBUG="$OPTARG";;
  217.     G)    GAMMAFILE="$OPTARG";;
  218.     I)    INTENT="$OPTARG";;
  219.     P)    NOPLANES=-P;;
  220.     X)    EXTRAPAD="-X $OPTARG";;
  221.     [234689])    NUP="$opt";;
  222.     [57])    error "Can't find acceptable layout for $opt-up";;
  223.     1)    case "$OPTARG" in
  224.         [024568])    NUP="1$OPTARG";;
  225.         *)    error "Can't find acceptable layout for 1$OPTARG-up";;
  226.         esac
  227.         ;;
  228.     o)    case "$OPTARG" in
  229.         l*)    NUP_ORIENT=-l;;
  230.         s*)    NUP_ORIENT=-r;;
  231.         p*|*)    NUP_ORIENT=;;
  232.         esac;;
  233.     V)    echo "$VERSION"; foo2qpdl -V; foo2zjs-pstops -V; exit 0;;
  234.     h|\?)
  235.         if [ "$CMDLINE" != "-?" -a "$CMDLINE" != -h ]; then
  236.             echo "Illegal command:"
  237.             echo "    $0 $CMDLINE"
  238.             echo
  239.         fi
  240.         usage;;
  241.     esac
  242. done
  243. shift `expr $OPTIND - 1`
  244.  
  245. #
  246. # If there is an argument left, take it as the file to print.
  247. # Else, the input comes from stdin.
  248. #
  249. if [ $# -ge 1 ]; then
  250.     if [ "$LPJOB" = "" ]; then
  251.     : # LPJOB="$1"
  252.     fi
  253.     exec < $1
  254. fi
  255.  
  256. #
  257. case "$QUALITY" in
  258. 0)
  259.     GSOPTS="-dCOLORSCREEN $GSOPTS"
  260.     ;;
  261. 1)
  262.     GSOPTS="-dCOLORSCREEN $GSOPTS"
  263.     ;;
  264. 2)
  265.     GSOPTS="-dMaxBitmap=500000000 $GSOPTS"
  266.     ;;
  267. wts)
  268.     GSOPTS="-dCOLORSCREEN -dMaxBitmap=500000000 $GSOPTS"
  269.     ;;
  270. esac
  271.  
  272. #
  273. #    Validate model code
  274. #
  275. case "$MODEL" in
  276. 0|1|2)    ;;
  277. *)    error "Unknown model code $MODEL";;
  278. esac
  279.  
  280. #
  281. #    Validate media code
  282. #
  283. case "$MEDIA" in
  284. 0|plain)    MEDIA=0;;
  285. 1|thick)    MEDIA=1;;
  286. 2|thin)        MEDIA=2;;
  287. 3|bond)        MEDIA=3;;
  288. 4|color)    MEDIA=4;;
  289. 5|card)        MEDIA=5;;
  290. 6|labels)    MEDIA=6;;
  291. 7|envelope)    MEDIA=7;;
  292. 8|preprinted)    MEDIA=8;;
  293. 9|cotton)    MEDIA=9;;
  294. 10|recycled)    MEDIA=10;;
  295. [0-9]*)        ;;
  296. *)        error "Unknown media code $MEDIA";;
  297. esac
  298.  
  299. #
  300. #    Validate source (InputSlot) code
  301. #
  302. case "$SOURCE" in
  303. 1|auto)        SOURCE=1;;
  304. 2|manual)    SOURCE=2;;
  305. 3|multi)    SOURCE=3;;
  306. 4|tray1)    SOURCE=4;;
  307. [0-9]*)        ;;
  308. *)        error "Unknown source code $SOURCE";;
  309. esac
  310.  
  311. #
  312. #    Validate Duplex code
  313. #
  314. case "$DUPLEX" in
  315. 1|off|none)    DUPLEX=1;;
  316. 2|long*)    DUPLEX=2;;
  317. 3|short*)    DUPLEX=3;;
  318. [0-9]*)        ;;
  319. *)        error "Unknown duplex code $DUPLEX";;
  320. esac
  321.  
  322. #
  323. #    Validate Resolution
  324. #
  325. case "$RES" in
  326. 600x600)    ;;
  327. 1200x600)    ;;
  328. 1200x1200)    ;;
  329. *)        error "Illegal resolution $RES";;
  330. esac
  331.  
  332. #
  333. #    Figure out the paper dimensions in pixels/inch, and set the
  334. #    default clipping region.  Unfortunately, this is a trouble
  335. #    area for ZjStream printers.  Various versions of ZjS print
  336. #    engines react differently when asked to print into their
  337. #    unprintable regions.
  338. #
  339. set_clipping() {
  340.     ulx=$1; uly=$2
  341.     lrx=$3; lry=$4
  342.  
  343.     # Set clipping region if it isn't already set
  344.     if [ "$CLIP_UL" = "" ]; then
  345.     case "$RES" in
  346.     600x600)    ulx=`expr $ulx / 2`;;
  347.     2400x600)    ulx=`expr $ulx \* 2`;;
  348.     esac
  349.     CLIP_UL="-u ${ulx}x${uly}"
  350.     fi
  351.     if [ "$CLIP_LR" = "" ]; then
  352.     case "$RES" in
  353.     600x600)    lrx=`expr $lrx / 2`;;
  354.     2400x600)    lrx=`expr $lrx \* 2`;;
  355.     esac
  356.     CLIP_LR="-l ${lrx}x${lry}"
  357.     fi
  358. }
  359.  
  360. case "$PAPER" in
  361. Custom*)
  362.         #%%BeginFeature: *CustomPageSize True
  363.         #216
  364.         #360
  365.         #0
  366.         #0
  367.         #0
  368.         #pop pop pop pop pop
  369.  
  370.         #%%BeginFeature: *CustomPageSize True
  371.         #792.000000 612.000000 1 0.000000 0.000000
  372.         #pop pop pop pop pop
  373.  
  374.         if [ $DEBUG = 0 ]; then
  375.             TMPFILE=/tmp/cus$$
  376.         else
  377.             TMPFILE=/tmp/custom.ps
  378.         fi
  379.         cat >$TMPFILE
  380.         exec <$TMPFILE
  381.  
  382.         tmp=`head -n 10000 $TMPFILE \
  383.             | sed -n '/CustomPageSize/{n;p;n;p;}' \
  384.             | tr '\n' ' '`
  385.         case "$tmp" in
  386.         [0-9]*\ [0-9]*)
  387.             XDIM=`echo "$tmp" | sed 's/ .*//'`
  388.             YDIM=`echo "$tmp" | sed -e 's/^[^ ]* //' -e 's/ .*//'`
  389.             ;;
  390.         *)
  391.             if [ $DEBUG = 0 ]; then rm -f $TMPFILE; fi
  392.             error "Custom page size [XY]DIM != 1-99999"
  393.             ;;
  394.         esac
  395.         XDIM=`dc -e "$XDIM 1200* 72/p"`
  396.         YDIM=`dc -e "$YDIM 600* 72/p"`
  397.         PAPER=21;        paper=letter;
  398.         # Doesn't work on a real printer - smudges.
  399.                 # set_clipping 2 100     2 100
  400.         set_clipping 150 100    150 100
  401.         ;;
  402. 0|letter)    PAPER=0;    paper=letter;    XDIM="10200"; YDIM="6600"
  403.         set_clipping 150 100    150 100
  404.         ;;
  405. 1|legal)    PAPER=1;    paper=legal;     XDIM="10200"; YDIM="8400"
  406.         set_clipping 150 100    150 100
  407.         ;;
  408. 3|executive)    PAPER=3;    paper=executive; XDIM="8700";  YDIM="6300"
  409.         set_clipping 150 100    150 100
  410.         ;;
  411. 2|a4|A4)    PAPER=2;    paper=a4;        XDIM="9920";  YDIM="7016"
  412.         set_clipping 150 100    150 100
  413.         ;;
  414. 16|a5|A5)    PAPER=16;    paper=a5;        XDIM="6992";  YDIM="4960"
  415.         set_clipping 150 100    150 100
  416.         ;;
  417. 11|b5jis|B5jis)    PAPER=11;    paper=b5;        XDIM="8598";  YDIM="6070"
  418.         set_clipping 150 100    150 100
  419.         ;;
  420. 24|folio)    PAPER=24;    paper=folio;     XDIM="9922"; YDIM="7796"
  421.         set_clipping 150 100    150 100
  422.         ;;
  423. 26|"env#9")    PAPER=26;    paper=env9;      XDIM="4496";  YDIM="5324"
  424.         set_clipping 150 100    150 100
  425.         ;;
  426. 6|"env#10")    PAPER=6;    paper=env10;     XDIM="4950";  YDIM="5700"
  427.         set_clipping 150 100    150 100
  428.         ;;
  429. 9|envDL)    PAPER=9;    paper=envDL;     XDIM="5200";  YDIM="5200"
  430.         set_clipping 150 100    150 100
  431.         ;;
  432. 8|envC5)    PAPER=8;    paper=envC5;     XDIM="7650";  YDIM="5408"
  433.         set_clipping 150 100    150 100
  434.         ;;
  435. 23|envC6)    PAPER=23;    paper=envC6;     XDIM="5386";  YDIM="3826"
  436.         set_clipping 150 100    150 100
  437.         ;;
  438. 12|b5iso|B5iso)    PAPER=12;    paper=b5;        XDIM="8314";  YDIM="5906"
  439.         set_clipping 150 100    150 100
  440.         ;;
  441. 7|envMonarch)    PAPER=7;    paper=envMonarch;XDIM="4650";  YDIM="4500"
  442.         set_clipping 150 100    150 100
  443.         ;;
  444. 25|env6.75)    PAPER=25;    paper=env6.75;   XDIM="4348";  YDIM="3900"
  445.         set_clipping 150 100    150 100
  446.         ;;
  447. 17|a6|A6)    PAPER=17;    paper=a6;        XDIM="4960";  YDIM="3496"
  448.         set_clipping 150 100    150 100
  449.         ;;
  450. 28|oficio)    PAPER=28;    paper=a6;        XDIM="10200"; YDIM="8100"
  451.         set_clipping 150 100    150 100
  452.         ;;
  453. *)        error "Unimplemented paper code $PAPER";;
  454. esac
  455. # e.g. /usr/share/ghostscript/7.07/lib/gs_statd.ps
  456. PAPERSIZE="-sPAPERSIZE=$paper";
  457.  
  458. case "$RES" in
  459. 600x600)    XDIM=`expr $XDIM / 2`;;
  460. 1200x600)    ;;
  461. 1200x1200)    YDIM=`expr $YDIM \* 2`;;
  462. esac
  463. DIM="${XDIM}x${YDIM}"
  464.  
  465. #
  466. # Filter thru psnup if N-up printing has been requested
  467. #
  468. case $NUP in
  469. [234689]|1[024568])    PREFILTER="nup";;
  470. *)            PREFILTER=cat;;
  471. esac
  472. if [ "$DEBUG" -ge 9 ]; then
  473.     PREFILTER="tee /tmp/$BASENAME.ps"
  474. fi
  475.  
  476. #
  477. #    Overload -G.  If the file name ends with ".icm" or ".ICM"
  478. #    then convert the ICC color profile to a Postscript CRD,
  479. #    then prepend it to the users job.  Select the intent
  480. #    using the -I option.
  481. #
  482.  
  483. create_crd() {
  484.     #
  485.     # Create a Postscript CRD
  486.     #
  487.     ICC2PS=$PREFIX/bin/foo2zjs-icc2ps
  488.     if [ -x $ICC2PS ]; then
  489.     case "$GAMMAFILE" in
  490.     none | none.icm | */none.icm)
  491.         ;;
  492.     *)
  493.         $ICC2PS -o $GAMMAFILE -t$INTENT > $ICCTMP.crd.ps 2>$ICCTMP.log \
  494.         || error "Problem converting .ICM file to Postscript"
  495.         ;;
  496.     esac
  497.  
  498.     PSTOPS_OPTS="$PSTOPS_OPTS -c"
  499.     cat > $ICCTMP.usecie.ps <<-EOF
  500.         %!PS-Adobe-3.0
  501.         <</UseCIEColor true>>setpagedevice
  502.     EOF
  503.     if [ "$QUALITY" = wts ]; then
  504.         cat >> $ICCTMP.usecie.ps <<-EOF
  505.         << /UseWTS true >> setuserparams
  506.         <<
  507.             /AccurateScreens true
  508.             /HalftoneType 1
  509.             /HalftoneName (Round Dot Screen) cvn
  510.             /SpotFunction { 180 mul cos exch 180 mul cos add 2 div}
  511.             /Frequency 137
  512.             /Angle 37
  513.         >> sethalftone
  514.         EOF
  515.     fi
  516.     cat > $ICCTMP.selcrd.ps <<-EOF
  517.         /Current /ColorRendering findresource setcolorrendering
  518.     EOF
  519.     case "$GAMMAFILE" in
  520.     none | none.icm | */none.icm) GAMMAFILE="$ICCTMP.usecie.ps";;
  521.     *)    GAMMAFILE="$ICCTMP.usecie.ps $ICCTMP.crd.ps $ICCTMP.selcrd.ps";;
  522.     esac
  523.     else
  524.     GAMMFILE=
  525.     fi
  526. }
  527.  
  528. if [ $DEBUG -gt 0 ]; then
  529.     ICCTMP=/tmp/icc
  530. else
  531.     ICCTMP=/tmp/icc$$
  532. fi
  533.  
  534. if [ "" = "$COLOR" ]; then
  535.     COLORMODE=
  536.     GAMMAFILE=
  537. else
  538.     case "$COLORMODE" in
  539.     default)    COLORMODE=$DEFAULTCOLORMODE;;
  540.     esac
  541.     case "$GAMMAFILE" in
  542.     default)    GAMMAFILE=samclp300-0.icm;;
  543.     esac
  544. fi
  545.  
  546. CRDBASE="$PREFIX/share/foo2qpdl/crd"
  547. case "$MODEL" in
  548.     0)    model=CLP-300;;
  549.     1)    model=CLP-600;;
  550.     2)    model=CLP-600;;
  551. esac
  552. case "$RES" in
  553.     600x600)    SCREEN=$model-600x600cms2;;
  554.     1200x600)    SCREEN=$model-1200x600cms2;;
  555.     1200x1200)    SCREEN=$model-1200x1200cms2;;
  556. esac
  557.  
  558. PSTOPS_OPTS="-n"
  559.  
  560. case "$COLORMODE" in
  561. 0|"")
  562.     # Monochrome
  563.     ;;
  564. 10|icm)
  565.     # Use old ICM method
  566.     AIB=-A
  567.     BC=-B
  568.     case "$GAMMAFILE" in
  569.     none | none.icm | */none.icm)
  570.     create_crd
  571.     ;;
  572.     *.icm|*.ICM|*.icc|*.ICC)
  573.     #
  574.     # Its really an .ICM file, not a gamma file.
  575.     #
  576.     # The file can be a full path name, or the name of a file in $SHARE/icm/
  577.     #
  578.     if [ -r "$GAMMAFILE" ]; then
  579.         create_crd
  580.     elif [ -r "$SHARE/icm/$GAMMAFILE" ]; then
  581.         GAMMAFILE="$SHARE/icm/$GAMMAFILE"
  582.         create_crd
  583.     else
  584.         GAMMAFILE=
  585.     fi
  586.     ;;
  587.     esac
  588.     ;;
  589. 1|crd)
  590.     # CRD
  591.     GAMMAFILE=""
  592.     GAMMAFILE="$GAMMAFILE $CRDBASE/${model}cms"
  593.     GAMMAFILE="$GAMMAFILE $CRDBASE/$SCREEN"
  594.     # Black text...
  595.     TMPFILE2=/tmp/black$$
  596.     cat $CRDBASE/black-text.ps - >$TMPFILE2
  597.     exec <$TMPFILE2
  598.     ;;
  599. *.crd)
  600.     GAMMAFILE="$CRDBASE/prolog.ps"
  601.     if [ -f $COLORMODE ]; then
  602.     GAMMAFILE="$GAMMAFILE $COLORMODE"
  603.     elif [ -f $CRDBASE/$COLORMODE ]; then
  604.     GAMMAFILE="$GAMMAFILE $CRDBASE/$COLORMODE"
  605.     else
  606.     error "Can't find CRD '$COLORMODE' in . or in $CRDBASE"
  607.     fi
  608.     GAMMAFILE="$GAMMAFILE $CRDBASE/$SCREEN"
  609.     ;;
  610. *)
  611.     error "Unknown color method '$COLORMODE'"
  612.     ;;
  613. esac
  614.  
  615. if [ "$COLOR" != "" -a "$QUALITY" = wts ]; then
  616.     PSTOPS_OPTS="$PSTOPS_OPTS -w"
  617. fi
  618.  
  619. if [ "" != "$COLOR" ]; then
  620.     if [ "" = "$AIB" -a "" = "$BC" ]; then
  621.     # Faster, but can't handle AllIsBlack or BlackClears
  622.     GSDEV=-sDEVICE=pksmraw
  623.     else
  624.     # Can't handle different size pages
  625.     GSDEV=-sDEVICE=bitcmyk
  626.     fi
  627. fi
  628.  
  629. #
  630. #    Figure out USERNAME
  631. #
  632. if [ "$LPUSER" != "" ]; then
  633.     USER="$LPUSER@$LPHOST"
  634. else
  635.     USER=""
  636. fi
  637.  
  638. #
  639. #    Main Program, just cobble together the pipeline and run it
  640. #
  641. #    The malarky with file descriptors 1 and 3 is to avoid a bug in
  642. #    (some versions?) of Ghostscript where Postscript's stdout gets
  643. #    intermingled with the printer drivers output, resulting in
  644. #    corrupted image data.
  645. #
  646. GS="$GSBIN -q -dBATCH -dSAFER -dQUIET -dNOPAUSE"
  647.  
  648. foo2zjs-pstops $PSTOPS_OPTS | \
  649. $PREFILTER \
  650. | ($GS $PAPERSIZE -g$DIM -r$RES $GSDEV $GSOPTS \
  651.     -sOutputFile="|cat 1>&3" $GAMMAFILE -_ >/dev/null) 3>&1 \
  652. | foo2qpdl -r$RES -g$DIM -p$PAPER -m$MEDIA -n$COPIES -d$DUPLEX -s$SOURCE \
  653.         -z$MODEL $COLOR $CLIP_UL $CLIP_LR $CLIP_LOG $SAVETONER \
  654.         -J "$LPJOB" -U "$USER" \
  655.         $BC $AIB $COLOR2MONO $NOPLANES $EXTRAPAD -D$DEBUG
  656.  
  657. #
  658. #    Log the command line, for debugging and problem reports
  659. #
  660. if [ -x /usr/bin/logger ]; then
  661.     logger -t "$BASENAME" -p lpr.info -- \
  662.     "$GSBIN $PAPERSIZE -g$DIM -r$RES $GSDEV $GSOPTS $GAMMAFILE"
  663.     logger -t "$BASENAME" -p lpr.info -- \
  664.     "foo2qpdl -r$RES -g$DIM -p$PAPER -m$MEDIA \
  665. -n$COPIES -d$DUPLEX -s$SOURCE -z$MODEL $COLOR $CLIP_UL $CLIP_LR $CLIP_LOG \
  666. $SAVETONER $BC $AIB $COLOR2MONO $NOPLANES $EXTRAPAD"
  667. fi
  668.  
  669. #
  670. #    Remove cruft
  671. #
  672. if [ $DEBUG -eq 0 ]; then
  673.     for i in crd.ps log usecie.ps selcrd.ps
  674.     do
  675.     file="$ICCTMP.$i"
  676.     [ -f $file ] && rm -f $file
  677.     done
  678.     [ -f "$TMPFILE" ] && rm -f $TMPFILE
  679.     [ -f "$TMPFILE2" ] && rm -f $TMPFILE2
  680. fi
  681.  
  682. exit 0
  683.